#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>


int EnvoieMessage(SOCKET s, char* format, ...)
{

  int i;
  int res;
  
  va_list liste_des_arguments;
  va_start(liste_des_arguments, format);
  /* fonction d'intialisation de la liste*/
  
  /*calcul de la taille du message*/
  int taille = vsnprintf(NULL, 0, format, liste_des_arguments);
  va_end(liste_des_arguments); //fonction appelée a chaque manip de liste
  
  /* taille du tableau avec le \0*/
  char chaine[taille+1];
  
  va_start(liste_des_arguments,format);
  vsnprintf(chaine,taille+1, format, liste_des_arguments);
  va_end(liste_des_arguments);
  
  /*fprintf(stderr, "Envoie %s \n", chaine);*/
  i=0;
  while (i<taille) 
  {
   /*one ne doit pas envoyer \0*/
   res=send(s,chaine+i,taille-i, MSG_NOSIGNAL);
   if (res<=0)
   {
     fprintf(stderr, "error: write %s car %s \n", chaine, strerror(errno));
     return -1;
     
   }
    i=i+res;
  }

return i;

}


int RecoieDonnees(int fd, SOCKET s)
{

  char buff[TAILLE_BUFF];
  int res, res2;
  int nb_recu=0;
  while(1)
  {
	 res=recv(s,buff,TAILLE_BUFF,0);
	 if (res<0)
	 {
		 perror("probleme a la lecture du fichier");
		 return -1;
     }
	 
	 if (res==0)
	 {
		 break;
	 }
	 nb_recu+=res;
	 res2= write(fd,buff,res);
	 if (res !=0 res2)
	 {
		 perror("probeleme a lecriture du fichier");
		 return -1;
		 }
	 
	 }
	return nb_recu;
}
